iT邦幫忙

0

Python copy by Value or Reference

  • 分享至 

  • xImage
  •  

在 Python 中,了解**拷貝(copy)是通過值(value)還是引用(reference)**進行的,對於管理資料和避免錯誤至關重要。讓我們來深入探討這個概念。

基本概念
值(Value):

當你將一個變數的值賦給另一個變數時,這意味著你在創建一個新的獨立副本。
改變一個變數的值不會影響另一個變數。
引用(Reference):

當你將一個變數賦值給另一個變數時,如果它們指向同一個物件,這意味著它們是引用同一個記憶體位置。
改變其中一個變數的內容會影響另一個變數,因為它們指向的是相同的物件。

Python 中的拷貝

在 Python 中,不同的數據類型的拷貝行為可以是值或引用,具體取決於數據類型。

1. 不可變類型(Immutable Types)

例子:整數(int)、浮點數(float)、字符串(str)、元組(tuple)
當你對不可變類型的變數進行賦值時,會生成一個新的對象,這是「值的拷貝」。
範例:

a = 10
b = a  # b 是 a 的拷貝
b = 20  # 改變 b 的值不會影響 a
print(a)  # 輸出:10
print(b)  # 輸出:20

在這個例子中,b 是 a 的值的拷貝,改變 b 的值不影響 a。

2. 可變類型(Mutable Types)

例子:列表(list)、字典(dict)、集合(set)
當你對可變類型的變數進行賦值時,兩個變數都指向同一個物件,這是「引用的拷貝」。
範例:

list_a = [1, 2, 3]
list_b = list_a  # list_b 引用 list_a
list_b[0] = 100  # 改變 list_b 的第一個元素
print(list_a)  # 輸出:[100, 2, 3]
print(list_b)  # 輸出:[100, 2, 3]

在這個例子中,list_b 和 list_a 共享同一個列表對象,因此改變 list_b 也會影響 list_a。

如何拷貝可變類型

如果你想創建一個可變類型的獨立拷貝,可以使用以下方法:

1.使用切片(對於列表):

list_a = [1, 2, 3]
list_b = list_a[:]  # 使用切片創建一個新的列表
list_b[0] = 100
print(list_a)  # 輸出:[1, 2, 3]
print(list_b)  # 輸出:[100, 2, 3]

2.使用 copy 模組:

import copy
list_a = [1, 2, 3]
list_b = copy.copy(list_a)  # 創建淺拷貝
list_b[0] = 100
print(list_a)  # 輸出:[1, 2, 3]
print(list_b)  # 輸出:[100, 2, 3]

3.深拷貝(Deep Copy):如果列表中有嵌套的對象,可以使用 copy.deepcopy()。

import copy

list_a = [[1, 2], [3, 4]]
list_b = copy.deepcopy(list_a)  # 創建深拷貝
list_b[0][0] = 100
print(list_a)  # 輸出:[[1, 2], [3, 4]]
print(list_b)  # 輸出:[[100, 2], [3, 4]]

總結

在 Python 中,不可變類型通常是以值的方式拷貝,而可變類型則是以引用的方式拷貝。
了解這一點可以幫助你更好地管理資料,避免不小心改變不希望改變的資料。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言